在神经网络的输出层,通常使用 softmax 函数来近似概率分布:
由于指数,这计算起来很昂贵。为什么不简单地执行 Z 变换以使所有输出均为正数,然后仅通过将所有输出除以所有输出之和进行归一化?
标准归一化相比,Softmax 有一个很好的属性。
它以相当均匀的分布对神经网络的低刺激(认为模糊图像)和概率接近 0 和 1 的高刺激(即大量,认为清晰图像)作出反应。
而标准归一化并不关心,只要比例相同。
看看当 soft max 有 10 倍大的输入时会发生什么,即你的神经网络得到了清晰的图像并且很多神经元被激活了
>>> softmax([1,2]) # blurry image of a ferret [0.26894142, 0.73105858]) # it is a cat perhaps !? >>> softmax([10,20]) # crisp image of a cat [0.0000453978687, 0.999954602]) # it is definitely a CAT !
然后将其与标准归一化进行比较
>>> std_norm([1,2]) # blurry image of a ferret [0.3333333333333333, 0.6666666666666666] # it is a cat perhaps !? >>> std_norm([10,20]) # crisp image of a cat [0.3333333333333333, 0.6666666666666666] # it is a cat perhaps !?